package cn.xyh.util;


import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import java.security.MessageDigest;

public class MD5Util {
    private static BASE64Encoder encoder = new BASE64Encoder();
    private static BASE64Decoder decoder = new BASE64Decoder();

    /**
     * 加密
     *
     * @param s
     * @return
     */
    public static String base64encode(String s) {
        try {
            String encodeStr = encoder.encode(s.getBytes());

            return encodeStr;
        } catch (Exception e) {
            return s;
        }
    }

    /**
     * 解密
     *
     * @param s
     * @return
     */
    public static String base64decode(String s) {
        try {
            String decodeStr = new String(decoder.decodeBuffer(s));

            return decodeStr;
        } catch (Exception e) {
            return s;
        }
    }

    /**
     * md5加密
     *
     * @param input
     * @return
     */
    public static String md5encode(String inStr) {
        MessageDigest md5 = null;
        try {
            md5 = MessageDigest.getInstance("MD5");
        } catch (Exception e) {
            System.out.println(e.toString());
            e.printStackTrace();
            return "";
        }
        char[] charArray = inStr.toCharArray();
        byte[] byteArray = new byte[charArray.length];

        for (int i = 0; i < charArray.length; i++)
            byteArray[i] = (byte) charArray[i];
        byte[] md5Bytes = md5.digest(byteArray);
        StringBuffer hexValue = new StringBuffer();
        for (int i = 0; i < md5Bytes.length; i++) {
            int val = ((int) md5Bytes[i]) & 0xff;
            if (val < 16)
                hexValue.append("0");
            hexValue.append(Integer.toHexString(val));
        }
        return hexValue.toString();

    }

    /**
     * 加密解密算法 执行一次加密，两次解密
     */
    public static String convertMD5(String inStr) {

        char[] a = inStr.toCharArray();
        for (int i = 0; i < a.length; i++) {
            a[i] = (char) (a[i] ^ 't');
        }
        String s = new String(a);
        return s;

    }


    public static void main(String args[]) {
        //测试BASE64加密
        //md5 --------------------------- e10adc3949ba59abbe56e057f20f883e
        //base 加密：ZTEwYWRjMzk0OWJhNTlhYmJlNTZlMDU3ZjIwZjg4M2U=

        //----------------------------e10adc3949ba59abbe56e057f20f883e
        //解密：

        String s = new String("11231");
        System.out.println("原始：" + s);
        System.out.println("MD5后：" + md5encode(s));
        System.out.println("加密的：" + convertMD5(s));
        System.out.println("解密的：" + convertMD5(convertMD5(s)));
        System.out.println("base64加密:" + base64encode("adasd"));
        System.out.println("base64解密:" + base64decode(base64encode("adasd")));
        String in = "1"; //123456
        System.out.println("java decode: " + String.valueOf(md5encode(in)));
        System.out.println("java decode: " + base64decode(in));
        System.out.println("page decode: e10adc3949ba59abbe56e057f20f883e");
    }
}